#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Interfaz.h"
#include "Utilitarios.h"

void menu_principal(Master* master){
    printf("=========================================================== \n");
    printf("                      SEMANA DE PATAN \n");
    printf("=========================================================== \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Registro de alumnos y fiestas\n");
    printf("    (2) Listado de alumnos, fiestas y asistencias \n");
    printf("    (3) Registro de interes en una fiesta\n");
    printf("    (4) Registro automatico de asistencia\n");
    printf("    (5) Registro manual de asistencia\n");
    printf("    (6) Reporte de recaudacion\n");
    printf("    (0) Finalizar el programa\n");
    printf("\n  Opcion: ");
    
    scanf("%d",&opcion); getchar();
    
    system("cls");
    switch (opcion){
        case 0: finalizar(master); break;
        case 1: menu_registroDeAlumnosYFiestas(master); break;
        case 2: menu_listadoDeAlumnosFiestasYAsistencias(master); break;
        case 3: menu_registroInteres(master); break;
        case 4: menu_registroAutomaticoAsistencia(master); break;
        case 5: menu_registroManuelAsistencia(master); break;
        case 6: menu_reporteRecaudacion(master); break;
    }
}

void menu_reporteRecaudacion(Master* master){
    int opcion;
    printf("6. EMITIR REPORTE DE RECAUDACION: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Emitir reporte\n");
    printf("    (2) Regresar\n");
    printf("    (0) Finalizar\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion); getchar();
    
    system("cls");
    switch (opcion){
        case 0: finalizar(master); break;
        case 1: 
            reporteRecaudacion(master);
            menu_reporteRecaudacion(master);           
            break;
        case 2: menu_principal(master); break;
    }
}

void menu_registroManuelAsistencia(Master* master){
    int opcion;
    printf("5. REGISTRO MANUAL DE ASISTENCIA: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Registrar manualmente su asistencia a una fiesta (solo a fiestas que aun tienen capacidad disponible)\n");
    printf("    (2) Regresar\n");
    printf("    (0) Finalizar el programa\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion);
    
    system("cls");
        switch (opcion){
        case 0: finalizar(master); break;
        case 1: registroManualAsistencia(master);
                menu_registroManuelAsistencia(master);
            break;
        case 2: menu_principal(master); break;
    }
}

void menu_registroDeAlumnosYFiestas(Master* master){
    int opcion;
    printf("1. REGISTRO DE ALUMNOS Y FIESTAS: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Registro de alumnos\n");
    printf("    (2) Registro de fiestas \n");
    printf("    (3) Regresar\n");
    printf("    (0) Finalizar el programa\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion); getchar();
    
    system("cls");
    switch (opcion){
        case 0: finalizar(master); break;
        case 1: 
            //imprimir_ListaAlumno(master->listaAlu);
            registroDeAlumno(master);
            //imprimir_ListaAlumno(master->listaAlu);
            menu_registroDeAlumnosYFiestas(master);           
            break;
        case 2: 
            //imprimir_ListaFiesta(master->listaFie);
            registroDeFiesta(master);
            //imprimir_ListaFiesta(master->listaFie); 
            menu_registroDeAlumnosYFiestas(master);
            break;
        case 3: menu_principal(master); break;
    }
}

void menu_listadoDeAlumnosFiestasYAsistencias(Master* master){
    int opcion;
    printf("2. MOSTRAR REGISTROS: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Mostrar el listado de alumnos\n");
    printf("    (2) Mostrar el listado de fiestas \n");
    printf("    (3) Mostrar el listado de asistencias\n");
    printf("    (4) Regresar\n");
    printf("    (0) Finalizar el programa\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion); getchar();
    
    system("cls");
    int campo, modo;
    switch (opcion){
        case 0: finalizar(master); break;
        case 1: 
            printf("Ingrese el campo por el que desea que se ordene la lista:\n");
            printf("    (0) Ordenar por código de alumno\n");
            printf("    (1) Ordenar por nombre \n");
            printf("    (2) Ordenar por código de especialidad\n");
            printf("    (3) Ordenar por fecha de nacimiento\n");
            printf("\n  Campo: ");
            scanf("%d",&campo); getchar();
            printf("Ingrese la forma de ordenación:\n");
            printf("    (0) Ascendentemente\n");
            printf("    (1) Descendentemente\n");
            printf("\n  Forma: ");
            scanf("%d",&modo); getchar();
            merge_sort_ListaAlumno(master->listaAlu,campo);
            printf("2.1. MOSTRAR LISTADO DE ALUMNOS: \n\n");
            encabezado("\tNOMBRE\t\tESPECIALIDAD\t\tFECHA DE NACIMIENTO");
            if(modo==0) imprimir_ListaAlumno(master->listaAlu);
            else if(modo==1) imprimir_ListaAlumno_des(master->listaAlu);
            mensaje("");
            menu_listadoDeAlumnosFiestasYAsistencias(master);           
            break;
        case 2: 
            printf("Ingrese el campo por el que desea que se ordene la lista:\n");
            printf("    (0) Ordenar por código de fiesta\n");
            printf("    (1) Ordenar por nombre de fiesta\n");
            printf("    (2) Ordenar por código de fiesta\n");
            printf("    (3) Ordenar por fecha de la fiesta\n");
            printf("\n  Campo: ");
            scanf("%d",&campo); getchar();
            printf("Ingrese la forma de ordenación:\n");
            printf("    (0) Ascendentemente\n");
            printf("    (1) Descendentemente\n");
            printf("\n  Forma: ");
            scanf("%d",&modo); getchar();
            merge_sort_ListaAlumno(master->listaFie,campo);
            printf("2.2. MOSTRAR LISTADO DE FIESTAS: \n\n");
            encabezado("\tNOMBRE\t\t\tCOSTO\t  FECHA DE REALIZACION");
            if(modo==0) imprimir_ListaFiesta(master->listaFie);
            else if(modo==1) imprimir_ListaFiesta_des(master->listaFie);
            mensaje("");
            menu_listadoDeAlumnosFiestasYAsistencias(master); 
            break;
        case 3:        
            
           
            menu_listadoAsistencia(master); break;
        case 4: menu_principal(master); break;
    }
}

void menu_listadoAsistencia(Master* master){
    printf("2.3 MOSTRAR LISTADO DE ASISTENCIAS: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Mostrar el listado de una fiesta \n");
    printf("    (2) Mostrar el listado de todas las fiestas\n");
    printf("    (3) Regresar \n");
    printf("    (0) Finalizar el programa \n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion); getchar();
    
    system("cls");
    switch (opcion){
        case 0: 
            finalizar(master); 
            break;
        case 1: 
            listadoAsistencia_Fiesta(master);
            menu_listadoAsistencia(master);
            break;
        case 2:        
            listadoAsistencia_Fiestas(master); 
            mensaje("");
            menu_listadoAsistencia(master);
            break;
        case 3: menu_listadoDeAlumnosFiestasYAsistencias(master); break;
    }
}

void mensaje(char *msn){
    printf("%s",msn);
    printf("\nPresione ENTER para continuar...");
    fflush(stdin);
    getchar();
    system("cls");
}

void encabezado(char* cad){
    printf("------------------------------------------------------------------------\n");
    printf("%s\n",cad);
    printf("------------------------------------------------------------------------\n");
    printf("\n");
}

/*void menu_registroAutomaticoAsistencia(){
    printf("4. REGISTRO AUTOMATICO DE ASISTENCIA: \n\n");
    printf("    Ingrese el nombre")
            
    switch(registroAutomaticoAsistencia(hash,codFiesta,capac)){
        case 0: printf("")
    }
}*/

int actualizarCapacidad(){
    printf("La fiesta solicitada ya tenia una capacidad previa.\n");
    printf("¿Desea actualizar la capacidad?\n");
    printf("    (0) No\n");
    printf("    (1) Si\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion);
    system("cls");
    return opcion;
}

int registrarInteresMismoAlumno(){
    system("cls");
    printf(" Desea registrarse en otra fiesta?\n");
    printf("    (0) No\n");
    printf("    (1) Si\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion);
    system("cls");
    return opcion;
}

void menu_registroInteres(Master* master){
    int opcion;
    printf("3. REGISTRO DE INTERES: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Registrar interes en una fiesta\n");
    printf("    (2) Regresar\n");
    printf("    (0) Finalizar el programa\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion);
    
    system("cls");
        switch (opcion){
        case 0: finalizar(master); break;
        case 1: registroInteres(master);
                menu_registroInteres(master);
                break;
        case 2: menu_principal(master); break;
    }
}

void menu_registroAutomaticoAsistencia(Master* master){
    printf("4. REGISTRO AUTOMATICO DE ASISTENCIA: \n\n");
    printf("Ingrese el numero de la opcion a la cual quiere acceder:\n");
    printf("    (1) Registrar asistencias automaticamente (solo a fiestas que aun tienen no tienen capacidad)\n");
    printf("    (2) Regresar\n");
    printf("    (0) Finalizar el programa\n");
    printf("\n  Opcion: ");
    scanf("%d",&opcion);
    
    system("cls");
        switch (opcion){
            case 0: finalizar(master); break;
            case 1: 
                registroAutomaticoAsistencia(master);
                menu_registroAutomaticoAsistencia(master);
                break;
            case 2: menu_principal(master); break;
        }
}

